在本教程的这一步骤中,首先为数据源插件中的静态列表定义数据源,然后在 Kanzi Studio 工程中使用以从数据源获取网格列表框 (Grid List Box) 节点中项的数据。
在本节中,您可以添加使数据源插件可以生成列表数据对象的功能。
要添加功能来生成列表数据对象:
//提供为静态列表创建数据对象的功能。 #include "data_object_static_list.hpp"
addDataObject
函数前面创建一个函数,将内存中的 XML 结构的内容转换为静态列表数据对象中的列表项。//使用此函数将列表项添加到列表数据对象。 static void addListItems(Domain* domain, DataObjectStaticListSharedPtr list, const tinyxml2::XMLElement* itemsElement) { for (const tinyxml2::XMLElement* child = itemsElement->FirstChildElement(); child; child = child->NextSiblingElement()) { //为列表项层级创建根数据对象。 DataObjectSharedPtr rootObject = make_shared<DataObject>(domain, "Item root"); //递归创建列表项树。 addDataObjectsRecursively(domain, rootObject, child); //将根数据对象中的第一个子项添加为列表项。放弃根对象。 list->addItem(rootObject); } }
addDataObject
函数添加一个条件,以从列表类型特性创建列表类型数据对象。//添加 XML 元素中的类型特性指定类型的数据对象。//从文本参数获取初始值。 DataObjectSharedPtr addDataObject(Domain *domain, const char* type, const char* name, const char* text) { ... //从列表类型特性创建列表数据对象。 else if (type && strcmp(type, "list") == 0) { object = make_shared<DataObjectStaticList>(domain, name); } ... }
addDataObjectsRecursively
函数以添加功能,从而在列表数据对象内创建数据对象。static void addDataObjectsRecursively(Domain* domain, DataObjectSharedPtr parent, const tinyxml2::XMLElement* xml) { ... //遍历 XML 文件中的树,为当前 XML 元素的每个子元素添加数据对象。 for (const tinyxml2::XMLElement* child = xml->FirstChildElement(); child; child = child->NextSiblingElement()) { //递归。 addDataObjectsRecursively(domain, object, child); } }
static void addDataObjectsRecursively(Domain* domain, DataObjectSharedPtr parent, const tinyxml2::XMLElement* xml) { ... //检查当前数据对象的类型是否为列表。 DataObjectStaticListSharedPtr list = dynamic_pointer_cast<DataObjectStaticList>(object); //遍历 XML 文件中的树,为当前 XML 元素的每个子元素添加数据对象。 for (const tinyxml2::XMLElement* child = xml->FirstChildElement(); child; child = child->NextSiblingElement()) { //如果列表类型中的 XML 元素名称为项,则在列表数据对象中创建数据对象。 if (list && strcmp(child->Name(), "items") == 0) { addListItems(domain, list, child); } else { //递归。 addDataObjectsRecursively(domain, object, child); } } }
在本节中,设置2D 网格列表框 (Grid List Box 2D) 节点来从插件根据数据源生成的列表数据对象中获取项数据。
要从数据源获取列表数据:
联系人列表现在接收来自 ClusterWithList.xml 数据源的数据。使用文本编辑器来更改 ClusterWithList.xml 文件中的值,保存 ClusterWithList.xml 文件,Kanzi Studio 预览 (Preview) 和数据源 (Data Sources) 窗口会显示更新的数据对象及其值。
在本教程中,您学习了如何定义 XML 数据源以及如何在 Kanzi Studio 中使用该数据源中的数据向 Kanzi 应用程序提供数据。现在您可以:
要详细了解有关 Kanzi 中数据源的信息,请参阅数据源。